package com.pureut.storage.mapper;


import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.pureut.storage.domain.WmsStockInfo;
import com.pureut.storage.dto.*;
import com.pureut.storage.vo.*;
import com.pureut.system.api.vo.QualityFreezeVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author: CM
 * @date: 2023/1/6    13:52
 */
@Mapper
public interface WmsStockInfoMapper extends BaseMapper<WmsStockInfo> {

    /**
     * 冻结新增仓库信息列表
     */
    List<WmsStockInfoDto> getWmsStockInfoList(@Param("wmsStockInfoVo") WmsStockInfoVo wmsStockInfoVo);

    /**
     * 物料在库区库位中的总数
     */
    Long getMaterialNumber(@Param("materialCode") String materialCode,@Param("stockInfo") String stockInfo);

    /**
     * 获取当前批次的总净重(在库)
     */
    Double getNetWeight(@Param("pici") String pici);

    /**
     * 根据母卷号码查询库存信息
     * @param masterVolumeNumber
     * @return
     */
    MasterVolumeDto selectMasterVolumeList(String masterVolumeNumber);

    /**
     * 根据母卷号码修改库存信息
     */
    int updateStockInfoById(WmsStockInfoVo wmsStockInfoVo);

    /**
     * 远程调用 删除库存信息
     * @param truncationMasterVolumeNumber
     * @return
     */
    int deleteStockInfoById(String truncationMasterVolumeNumber);

    /**
     *根据物料编码和批次号获取仓库信息
     */
    List<WmsStockInfoDto> getStockInfoList(WmsStockInfoVo wmsStockInfoVo);

    /**
     * 查询仓库信息（品质检验冻结查询）
     */
    List<WmsStockInfoDto> getFreezeStockList(QualityFreezeVo qualityFreezeVo);

    /**
     * 库存汇总
     */
    List<WmsStockInfoSumDto> sumStockList(CheckStockVo checkStockVo);

    /**
     * 库存明细列表查询
     * @return
     */
    List<WmsStockInfoDto> getStockList(CheckStockVo checkStockVo);

    /**
     * 盘点中物料
     * @return
     */
    List<WmsStockInfoDto> getAllotList(CheckStockVo checkStockVo);

    /**
     * 类别加编码获取仓库数据
     */
    List<WmsStockInfoDto> getDataByCategoryAndCode(@Param("numberList") List<String> numberList);

    /**
     * 查询制令单下的关联仓库状态为返工
     * @return
     */
    List<MoStockDto> getMoStockInfo(MoStockInfoVo moStockInfoVo);

    /**
     * 查询采购入库单关联仓库状态为批退的物料号码
     * @param purchaseStockVo
     * @return
     */
    List<MoStockDto> getPurchase(PurchaseStockVo purchaseStockVo);

    /**
     * 查询基础信息（feign调用 追溯管理页面使用 库存表）
     * @param wsiCategory, wsiMaterialNumber
     * @return
     */
    List<RetrospectManageDto> getRetrospectManageList(@Param("wsiCategory") Long wsiCategory, @Param("wsiMaterialNumber") String wsiMaterialNumber);

    /**
     * 查询基础信息（feign调用 追溯管理页面使用 仓库日志表）
     * @param wsiCategory, wsiMaterialNumber
     * @return
     */
    List<RetrospectManageDto> selectRetrospectManageInfo(@Param("wsiCategory") Long wsiCategory, @Param("wsiMaterialNumber") String wsiMaterialNumber);


    /**
     * 查询同批次物料 （feign调用 追溯管理页面使用 库存表）
     * @param wsiMaterialNumber 根据物料号码查询
     * @return
     */
    RetrospectMaterialDto getRetrospectMaterialList(String wsiMaterialNumber);

    /**
     * 查询同批次物料 （feign调用 追溯管理页面使用 库存日志表）
     * @param wsiMaterialNumber 根据物料号码查询
     * @return
     */
    RetrospectMaterialDto getRetrospectMaterialListLog(String wsiMaterialNumber);

    /**
     * 查询物料编码
     * @param wsiMaterialNumber
     * @return
     */
    ProductTraceabilityDto getWsiMaterialNumberList(String wsiMaterialNumber);

    /**
     * 查询产品追溯基础信息（feign调用 产品追溯页面使用 仓库表）
     * @param wsiMaterialNumber
     * @return
     */
    ProductTraceabilityDto getProductTraceabilityList(String wsiMaterialNumber);

    /**
     * 查询产品追溯基础信息（feign调用 产品追溯页面使用 仓库日志表）
     * @param wsiMaterialNumber
     * @return
     */
    ProductTraceabilityDto getProductTraceabilityListLog(String wsiMaterialNumber);


    /**
     * 来料打印 物料履历
     * @param wsiMaterialNumber
     * @return
     */
    List<MaterialResumeDto>  getIncomingPersonalDetails(String wsiMaterialNumber);

    /**
     * 采购入库 物料履历
     * @param wsiMaterialNumber
     * @return
     */
    List<MaterialResumeDto>  getPurchasePersonalDetails(String wsiMaterialNumber);

    /**
     * 生产退料 物料履历
     * @param wsiMaterialNumber
     * @return
     */
    List<MaterialResumeDto>  getProductionReturnPersonalDetails(String wsiMaterialNumber);

    /**
     * 其他入库 物料履历
     * @param wsiMaterialNumber
     * @return
     */
    List<MaterialResumeDto>  getOtherWarehousingPersonalDetails(String wsiMaterialNumber);

    /**
     * 生产领料 物料履历
     * @param wsiMaterialNumber
     * @return
     */
    List<MaterialResumeDto>  getPickingPersonalDetails(String wsiMaterialNumber);

    /**
     * 委外发货 物料履历
     * @param wsiMaterialNumber
     * @return
     */
    List<MaterialResumeDto>  getOutsourcingShipmentPersonal(String wsiMaterialNumber);

    /**
     * 采购退货 物料履历
     * @param wsiMaterialNumber
     * @return
     */
    List<MaterialResumeDto>  getPurchaseReturn(String wsiMaterialNumber);

    /**
     * 其他出库 物料履历
     * @param wsiMaterialNumber
     * @return
     */
    List<MaterialResumeDto>  getOtherOutbound(String wsiMaterialNumber);

    /**
     * 完工入库 物料履历
     * @param wsiMaterialNumber
     * @return
     */
    List<MaterialResumeDto>  getWipCompletionList(String wsiMaterialNumber);

    /**
     * 委外入库 物料履历
     * @param wsiMaterialNumber
     * @return
     */
    List<MaterialResumeDto>  getSubcontractReceiptList(String wsiMaterialNumber);

    /**
     * 返工出库 物料履历
     * @param wsiMaterialNumber
     * @return
     */
    List<MaterialResumeDto>  getPickingCompleteInfoList(String wsiMaterialNumber);

    /**
     * 委外退货 物料履历
     * @param wsiMaterialNumber
     * @return
     */
    List<MaterialResumeDto>  getPickingReturnsInfoList(String wsiMaterialNumber);

    /**
     * 销售退货 物料履历
     * @param wsiMaterialNumber
     * @return
     */
    List<MaterialResumeDto>  getSalesReturnInfoList(String wsiMaterialNumber);

    /**
     * 销售发货 物料履历
     * @param wsiMaterialNumber
     * @return
     */
    List<MaterialResumeDto>  getSalesShipmentInfoList(String wsiMaterialNumber);

    /**
     * 库存汇总
     * @param wmsStockInfoVo
     * @return
     */
    List<InventorySummaryDto> getInventorySummaryList(WmsStockInfoVo wmsStockInfoVo);

    /**
     * 原料明细
     * @param wmsStockInfoVo
     * @return
     */
    List<DetailsMaterialsDto> getInventoryMaterialDetailed(WmsStockInfoVo wmsStockInfoVo);

    /**
     * 辅料明细
     * @param wmsStockInfoVo
     * @return
     */
    List<DetailsMaterialsDto> getInventoryAccessoriesDetailed(WmsStockInfoVo wmsStockInfoVo);

    /**
     * 成品明细
     * @param wmsStockInfoVo
     * @return
     */
    List<DetailsMaterialsDto> getInventoryFinishProductDetailed(WmsStockInfoVo wmsStockInfoVo);

    /**
     * 半成品明细
     * @param wmsStockInfoVo
     * @return
     */
    List<DetailsMaterialsDto> getInventoryMaterialHalfDetailed( WmsStockInfoVo wmsStockInfoVo);

    /**
     * 废料明细
     * @param wmsStockInfoVo
     * @return
     */
    List<DetailsMaterialsDto> getInventoryWasteDetailed( WmsStockInfoVo wmsStockInfoVo);

    /**
     * 委外发货新增物料汇总信息
     * @return
     */
    List<OutsourceSumDto> getOutsourceStock(OutsourceSumVo outsourceSumVo);

    /**
     * 查询库存信息
     * @param wsiWarehouse
     * @return
     */
    List<WmsStockInfo> selectAlarmInformationById(Long wsiWarehouse);

    /**
     * 根据母卷号码查询母卷
     * @param wsiMaterialNumber
     * @return
     */
    WmsStockInfo selectOneWmsStockInfo(String wsiMaterialNumber);

    /**
     * 根据库存物料编码分组查出具体的物料编码
     * @return
     */
    List<WmsStockInfoSumDto> groupMaterialCode();

    /**
     * 获取库存物料号码信息
     * @return
     */
    List<WmsStockDto> getMaterialList();

    void updateRecheckDate(@Param("updateWmsVos") List<UpdateWmsVo> updateWmsVos,@Param("date") String date);
}
